A storage controller is a physical processing device that is used to store and retrieve data on behalf of one or more hosts. A network storage controller can be configured (e.g., by hardware, software, firmware, or any combination thereof) to operate as a storage server that serves one or more clients on a network, to store and manage data in a set of mass storage devices, such as magnetic or optical storage-based disks, tapes, or flash memory. Some storage servers are designed to service file-level requests from hosts, as is commonly the case with file servers used in a network attached storage (NAS) environment. Other storage servers are designed to service block-level requests from hosts, as with storage servers used in a storage area network (SAN) environment. Storage servers in a SAN environment organize the storage into one or more logical units that can be addressed by the host and be used as containers to store data. Each logical unit can be divided into a number of fixed size logical blocks, and the host can store/retrieve data at the granularity of a logical block. Still other storage servers are capable of servicing both file-level requests and block-level requests, as is the case with certain storage servers made by NetApp®, Inc. of Sunnyvale, Calif., employing the Data ONTAP® storage operating system.
A network storage system can be an individual storage server that provides one or more clients with access to data stored in a mass storage subsystem. Recently, however, with storage capacity demands increasing rapidly in almost every business sector, there has been a trend towards the use of clustered network storage systems, to improve scalability. In addition, as more and more business critical applications are being deployed on virtualized, shared infrastructure, there has been a trend towards using clustered network storage systems to improve reliability. In a clustered storage system, two or more storage server nodes are connected in a distributed architecture such that the storage server nodes operate in a coordinated manner to respond to client requests. Each storage server node is in fact a storage server, although it has a distributed architecture. Two or more such storage server nodes are typically connected to form a storage cluster, where each of the nodes in the cluster can communicate with the other nodes in the cluster.
A clustered architecture allows convenient scaling through the addition of more nodes, all capable of communicating with each other. Further, a storage cluster may present a single system image of stored data to clients and administrators, such that the actual location of data can be made transparent to clients and administrators. However, as the number of nodes in a cluster increases, maintaining a consistent single system image across the nodes of the cluster becomes a challenge as management and control operations are performed on the cluster resources.